/**
 * 判断是不是 Map 实例
 * @param data
 */
export function isMap(data: any): data is Map<any, any> {
  return isDataType(data, 'Map')
}

/**
 * 判断是不是 Set 实例
 * @param data
 */
export function isSet(data: any): data is Set<any> {
  return isDataType(data, 'Set')
}

/**
 * 判断是不是对象类型
 * @param data
 */
export function isObject(data: any): data is object {
  return isDataType(data, 'Object');
}

/**
 * 判断是不是数组类型
 * @param data
 */
export function isArray(data: any): data is Array<any> {
  return isDataType(data, 'Array')
}

/**
 * 判断是不是数字类型
 * @param data
 */
export function isString(data: any): data is String {
  return isDataType(data, 'String')
}

/**
 * 判断是不是数字类型
 * @param data
 */
export function isNumber(data: any): data is Number {
  return isDataType(data, 'Number')
}

/**
 * 判断是还不是Promise函数
 * @param data
 */
export function isPromise (data: any): data is Promise<any> {
  return isDataType(data,'Promise')
}

/**
 * 判断是不是空对象
 * @param data
 */
export function isEmptyObject (data: object) {
  return isObject(data) && Object.keys(data).length === 0
}


/**
 * 这是一个判断数据类型的函数
 * @param data
 * @param type
 */
export function isDataType(data: any, type: string) {
  return Object.prototype.toString.call(data) === `[object ${type}]`
}